The importance of error detection coding of data in data computer systems and data transmission systems, including computer networks, has increased greatly as data transmission rates have increased. Data is typically transmitted over a network in the form of multi-byte packets. As the transmission capabilities of the transmission systems increase, the size of the packets increases, allowing more data to be transmitted in a given period of time, In order to avoid problems with errors at the receiving end, error detection codes ("EDC's") are employed to, as the name implies, detect erroneous data.
Before a string of data symbols is transmitted, it is mathematically encoded to form EDC symbols. The EDC symbols are then appended to the data string to form a code word--data symbols plus EDC symbols--and the code word is transmitted as part of a packet. When the packet is received, the code word is mathematically decoded. During decoding any errors in the data are detected through manipulation of the EDC symbols [For a detailed description of decoding see Peterson and Weldon, Error Correcting Codes, 2d Edition, MIT Press, 1972].
Transmission errors occur as multiple independent, or random, errors and/or long bursts of errors. One of the most effective types of EDC used for the detection of multiple random errors is a Bose-Chaudhuri-Hocquenghem (BCH) error detection code [For a detailed description of BCH codes, see Peterson and Weldon, Error Correcting Codes]. To detect multiple random errors in strings of data symbols, BCH codes efficiently and effectively utilize the various mathematical properties of sets of symbols known as Galois Fields, represented "GF(P.sup.q)", where "P" is a prime number and "q" can be thought of as the number of digits, base P, in each element or symbol in the field. "P" usually has the value 2 in digital computer applications and, therefore, "q" is the number of bits in each symbol. For binary codes, q=1 and thus each symbol is a bit.
The number of bits which a binary BCH code can effectively encode and protect depends on the code length. The code length is determined by the associated primitive polynomial, where the primitive polynomial is a factor of the code. The higher the degree of the primitive polynomial, the longer the code and the more bits it can protect. If m is the degree of the primitive polynomial, the code length is 2.sup.m -1, and thus, the code can protect 2.sup.m -1 symbols minus "n", where "n" is the number of EDC symbols.
BCH codes are good for detecting random errors but are not particularly good for detecting burst errors. In order to enhance a BCH code's burst error detecting capability, the code may be modified by including in it another factor which is specifically selected for its burst detecting capabilities. This factor, also, increases the length of the code by r, where r is the period of the factor. Thus the length of the modified code is r(2.sup.m -1), if r is prime to 2.sup.m.
Known encoders do not currently use binary codes which are long enough to encode and protect the data in the larger packets. These encoders may encode a larger packet by manipulating a shorter binary code, for example, by interleaving the code a number of times. However, the encoding and decoding operations associated with such manipulations are complex and time consuming. Accordingly, they slow the data transmission rates.
What is needed is an encoder for encoding data in accordance with a binary code which is long enough to encode the larger data packets. Such an encoder can thus encode the packet data without interleaving or other manipulation of the code. Moreover, the code must have good error detection capabilities for both independent errors and long burst errors.